#include<stdio.h>
#include<string.h>
// 下面这三个头文件都是open需要的
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
// 下面这个是close需要的
#include<unistd.h>

// 使用系统调用接口来实现文件操作

#define FILE_NAME "text.txt"

int main()
{
    // 以O_WRONLY（只写）的方式打开文件
    // // c语言中fopen选w，在open中要选 O_WRONLY, O_CREAT(文件不存在创建文件),O_TRUNC(每次打开清空文件内容) + 0666
    int fd = open(FILE_NAME, O_WRONLY | O_CREAT | O_TRUNC, 0666);
    //int fd = open(FILE_NAME, O_WRONLY | O_CREAT | O_APPEND, 0666); // fopen的a模式
    if(fd < 0)
    {
        perror("open error");
        return 1;
    }

    // 使用write对文件进行写入
    char buffer1[64];
    for(int i = 1; i < 6;  i++)
    {
        sprintf(buffer1, "%s:%d\n", "hello", i);
        write(fd, buffer1, strlen(buffer1)); // 向文件写入string的时候，不要将\0写进去，会出现乱码
    }

    close(fd);

    // 以只读方式打开文件
    int fd2 = open(FILE_NAME, O_RDONLY); 
    if(fd < 0)
    {
        perror("open error");
        return 1;
    }
    //使用read对文件进行读取
    char buffer2[1024];
    ssize_t num = read(fd2, buffer2, sizeof(buffer2) - 1);//-1是为了留个\0的位置
    if(num > 0)
        buffer2[num] = 0; // 0 '\0' NULL都是0
    printf("%s", buffer2);
    
    close(fd2);

    return 0;
}
